昨天我們學會了用快取加速世界線檢查,讓 CI 不用每次都重頭跑
但問題來了,即使測試過了,如果程式碼風格亂七八糟,長遠來說還是會出大事
所以今天,我們要請出「世界線清理者」:Lint(代碼靜態檢查工具)
Lint = 程式碼的清道夫
它不會真的「執行」程式,而是像讀稿老師一樣,檢查你的程式碼有沒有
就像即使世界線還沒崩壞,D-mail發送錯誤訊號也會讓未來走歪
Lint 的存在,就是要幫我們「提前發現錯誤訊號」
今天會使用flake8來示範如何偵測程式碼問題,因為它輕量、好上手
然後再用另一個叫black的工具自動整理
在 .github/workflows/ci.yml 裡新增一步「啟動世界線清理者」:
name: CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: 下載世界線紀錄(程式碼)
uses: actions/checkout@v3
- name: 安裝 Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: 安裝套件
run: pip install -r requirements.txt
- name: 安裝世界線清理者(flake8)
run: pip install flake8
- name: 啟動世界線檢查(測試)
run: pytest -q
- name: 啟動世界線清理者(Lint)
run: flake8 .
然後 push 上去 → GitHub Actions 會在「Lint」那一步直接 Fail:
.\app.py:7:1: E305 expected 2 blank lines after class or function definition, found 1
.\app.py:8:23: W292 no newline at end of file
.\tests\test_worldline.py:1:1: E265 block comment should start with '# '
.\tests\test_worldline.py:10:1: E302 expected 2 blank lines, found 1
.\tests\test_worldline.py:13:1: E302 expected 2 blank lines, found 1
.\tests\test_worldline.py:14:38: W292 no newline at end of file
這些基本上都是不影響程式執行,但不符合PEP8規範的寫法
常見的像:
而這些都可以透過接下來要介紹的這個工具來自動修正-black
在此之前先把這些套件都安裝起來
修改專案裡的requirements.txt
pytest
flake8
black
如果看預設規範不順眼,可以建立個設定檔./.flake8
# ./.flake8
[flake8]
max-line-length = 100 #限制該行最大字數
extend-ignore =
E203,
W503
exclude =
.git,
__pycache__,
.venv,
venv,
dist,
build
但一般不會交給CI更動我們的程式碼,所以我們在本地執行
先安裝最新套件,然後執行black
pip install -r requirements.txt
black .
之後再push到世界線檢查機構一次,會發現順利通過了
這就像岡部倫太郎每次「世界線跳躍」都要修正關鍵事件,不然未來就會爆炸